Java 平台系统梳理

Java 是由 Sun Microsystems(后被 Oracle 收购)于 1995 年发布的面向对象编程语言及运行时平台。其核心设计理念是 "Write Once, Run Anywhere"(一次编写,到处运行),通过 Java 虚拟机(JVM)实现跨平台能力。当前 Java SE 最新版本为 26(2026),LTS 版本包括 8、11、17、21。

平台组成:Java 平台 = JDK(开发工具包)⊃ JRE(运行环境)⊃ JVM(虚拟机)。JDK 包含编译器(javac)、JRE 包含类库,JVM 执行字节码。
版本代号发布时间关键特性
Java 8LTS2014.03Lambda、Stream API、Optional、新日期API
Java 11LTS2018.09HTTP Client、模块化强化、ZGC
Java 17LTS2021.09密封类、Pattern Matching、Records、FFI
Java 21LTS2023.09虚拟线程(Virtual Threads)、Record Patterns、字符串模板
Java 26Current2026.03分代 ZGC、结构化并发(Stable)、值类型(Preview)

2. 行为图(系统做什么)

从开发者与系统交互的角度,递进展示 Java 平台的核心行为流程。

2.1 用例图 — Java 平台用户场景

展示 Java 平台的主要参与者及其用例:开发者编写代码、编译、运行、调试、部署等核心场景。

Java Platform Use Case Diagram
图 1:Java 平台用例图
// Demo:开发者典型工作流
// 1. 编写源码
public class Hello { public static void main(String[] a) { System.out.println("Hello"); } }
// 2. 编译
// $ javac Hello.java
// 3. 运行
// $ java Hello

2.2 活动图 — Java 源码到执行全流程

展示从 .java 源文件到 CPU 执行的完整流水线:编译 → 类加载 → 字节码验证 → 解释执行/JIT 编译 → GC 管理。

Java Source to Execution Activity Diagram
图 2:Java 源码到执行的活动图(带泳道)

2.3 状态机图 — JVM 线程生命周期

JVM 线程从创建到终止经历 6 种状态,受操作系统调度和 Java 并发 API(wait/notify、LockSupport、synchronized)驱动。

JVM Thread Lifecycle State Machine
图 3:JVM 线程生命周期状态机
// Demo:线程状态转换演示
Thread t = new Thread(() -> {
    try { Thread.sleep(1000); }              // TIMED_WAITING
    catch (InterruptedException e) {}
    synchronized (lock) { lock.wait(); }     // WAITING
});
t.start();  // NEW → RUNNABLE
t.join();   // 主线程 WAITING

2.4 序列图 — HotSpot JVM 方法调用过程

展示 Java 方法调用在 JVM 内部的完整协作流程,包括类加载、字节码解释/编译、JNI 调用机制。

JVM Method Invocation Sequence Diagram
图 4:JVM 方法调用序列图

3. 结构图(系统由什么组成)

从宏观架构到内部细节,递进展示 Java 平台的静态组织结构。

3.1 组件图 — JVM 内部架构

JVM(HotSpot 实现)主要由三大子系统组成:类加载子系统、运行时数据区、执行引擎。

JVM Internal Component Diagram
图 5:JVM 内部组件图
运行时数据区:堆(Heap)存放对象实例,所有线程共享;栈(Stack)存放局部变量/操作数栈,每个线程私有;方法区(Metaspace)存放类元数据;程序计数器记录当前执行指令地址;本地方法栈服务于 Native 方法。

3.2 包图 — Java SE 21 模块系统

Java 9 引入模块化系统(Project Jigsaw),JDK 自身拆分为 70+ 模块,以 java.base 为根模块。

Java SE Module System Package Diagram
图 6:Java SE 21 核心模块包图
模块核心包用途
java.basejava.lang, java.util, java.io, java.math基础 API,所有模块的根
java.desktopjava.awt, javax.swingGUI 开发
java.sqljava.sql, javax.sqlJDBC 数据库访问
java.loggingjava.util.logging核心日志框架
java.net.httpjava.net.httpHTTP/2 与 WebSocket 客户端
jdk.compilercom.sun.source.*, javax.toolsjavac 编译器实现

3.3 类图 — Java 核心类层次

展示 Java 语言核心类型体系的继承、实现与组合关系。

Java Core Class Hierarchy
图 7:Java 核心类层次类图
// Demo:核心类型的使用
String s = "hello";                         // java.lang.String (final)
List<String> list = new ArrayList<>();        // java.util 集合框架
list.add(s);
list.stream().filter(x -> x.length() > 3)   // Stream API (Java 8)
    .forEach(System.out::println);           // 方法引用

3.4 部署图 — 典型 Java 应用生产部署

展示 Spring Boot 微服务架构的典型物理部署拓扑。

Java Application Deployment Diagram
图 8:Java 微服务生产部署图

4. 使用手册

4.1 安装 JDK

推荐使用 Eclipse Adoptium(开源 OpenJDK 构建版)或 Oracle JDK。

# macOS (Homebrew)
brew install openjdk@21

# Ubuntu/Debian
sudo apt install openjdk-21-jdk

# 验证安装
java --version
javac --version

4.2 第一个 Java 程序

// Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}
# 编译与运行
javac Hello.java          # → Hello.class
java Hello                # 输出: Hello, Java!

# Java 11+ 可直接运行单文件
java Hello.java           # 输出: Hello, Java!

4.3 构建工具

工具配置文件特点
Mavenpom.xml约定优于配置,依赖管理、生命周期、插件生态
Gradlebuild.gradle (.kts)灵活 DSL、增量构建、性能优于 Maven
Antbuild.xml传统,已逐渐被替代
// Maven pom.xml 最小示例
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>demo</artifactId>
  <version>1.0</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>3.3.0</version>
    </dependency>
  </dependencies>
</project>

4.4 核心语言特性

特性引入版本说明
面向对象(OOP)Java 1.0类、继承、多态、封装、接口、抽象类
泛型(Generics)Java 5编译期类型安全检查,消除强制转型
Lambda 表达式Java 8函数式编程,简化匿名类,配合 Stream API
Stream APIJava 8声明式集合操作:filter/map/reduce/collect
模块系统(Jigsaw)Java 9module-info.java,强封装,定制 JRE 镜像(jlink)
var 局部类型推断Java 10var list = new ArrayList<String>()
RecordsJava 14(Preview) / 16不可变数据载体,自动生成 equals/hashCode/toString
Sealed ClassesJava 15(Preview) / 17限制可继承的子类范围
Virtual ThreadsJava 19(Preview) / 21轻量级虚拟线程,高并发低成本(Project Loom)
Pattern MatchingJava 16-21instanceof 增强、switch 模式匹配、record pattern
字符串模板Java 21(Preview)STR."Hello \{name}" 字符串插值

4.5 最佳实践

编码规范

  • 类名 PascalCase,方法/变量 camelCase,常量 UPPER_SNAKE
  • 遵循 Google Java Style Guide
  • 接口优于抽象类,组合优于继承
  • 使用 Optional 替代 null 返回
  • 资源用 try-with-resources 自动关闭
  • 用 enum 替代魔法常量

性能调优

  • 选择合适 GC:G1(平衡)、ZGC(低延迟)、Parallel(吞吐量)
  • 合理设置堆大小:-Xms / -Xmx
  • 使用 -XX:+UseStringDeduplication 减少重复字符串
  • JDK Flight Recorder (JFR) + JDK Mission Control (JMC) 诊断性能
  • 虚拟线程替代线程池处理高 I/O 场景
常用 JDK 工具: jps(列出 JVM 进程)、jstack(线程 dump)、jmap(堆 dump)、jstat(GC 统计)、jcmd(诊断命令)、jlink(定制运行时镜像)、jpackage(打包原生安装包)、jshell(REPL 交互式编程)